package paidaxing.blog.post.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import paidaxing.blog.common.result.PageResult;
import paidaxing.blog.post.mapper.DemoMapper;
import paidaxing.blog.post.entity.UserDemo;
import paidaxing.blog.post.entity.UserDemoDTO;
import paidaxing.blog.post.service.DemoService;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * demo接口训练服务类
 *
 * @author heefM
 * @date 2025-10-20
 */
@Service
public class DemoServiceImpl implements DemoService {

    @Resource
    private DemoMapper demoMapper;

    /**
     * 分页查询
     * @param pageNo
     * @param pageSize
     * @return
     */
    @Override
    public PageResult<UserDemoDTO> queryPage(Integer pageNo, Integer pageSize) {
        //计算当前起始页码
        int start=(pageNo-1)* pageSize;

        //查询当前页的全部数据(查出来是多个UserDemo数据)--查出来的是实体
        List<UserDemo> queryPageList= demoMapper.queryPage(start,pageSize);

        //查询一共有多少数据
        long total=demoMapper.queryCount();

        //遍历实体集合,转成dto返回给前端-->传统方式
        List<UserDemoDTO> userDemoDTOList=new ArrayList<>();
        for (UserDemo userDemo : queryPageList) {
            UserDemoDTO userDemoDTO = new UserDemoDTO();
            BeanUtils.copyProperties(userDemo, userDemoDTO);
            userDemoDTOList.add(userDemoDTO);//拷贝一个丢一个进去
        }

//        List<UserDemoDTO> userDemoDTOList = queryPageList.stream()
//                .map(userDemo -> {
//                    UserDemoDTO userDemoDTO = new UserDemoDTO();
//                    BeanUtils.copyProperties(userDemo, userDemoDTO);
//                    return userDemoDTO;
//                })
//                .collect(Collectors.toList());

        PageResult<UserDemoDTO> pageResult = new PageResult<>();
        pageResult.setRecords(userDemoDTOList);
        pageResult.setTotal((int) total);
        pageResult.setPageNo(pageNo);
        pageResult.setPageSize(pageSize);

        return pageResult;
    }

    /**
     * 条件查询列表数据
     * @param userDemoDTO
     * @return
     */
    @Override
    public List<UserDemoDTO> queryList(UserDemoDTO userDemoDTO) {
        //将传递进来的UserDemoDTO转成数据库实体类UserDemo-->为了构建查询条件
        UserDemo userDemo = new UserDemo();
        BeanUtils.copyProperties(userDemoDTO, userDemo);

        //根据条件查询数据库-->获得数据
        List<UserDemo> userDemoList=demoMapper.queryList(userDemo);

        //转换数据
        List<UserDemoDTO> userDemoDTOList=new ArrayList<>();
        for (UserDemo demo : userDemoList) {
            UserDemoDTO demoDTO = new UserDemoDTO();
            BeanUtils.copyProperties(demo, demoDTO);
            userDemoDTOList.add(demoDTO);
        }
        return userDemoDTOList;
    }

    /**
     * 分页条件查询
     * @param userDemoDTO
     * @return
     */
    @Override
    public PageResult<UserDemoDTO> queryPageList(UserDemoDTO userDemoDTO,Integer pageNo,Integer pageSize) {

        //计算当前起始页码
        int start=(pageNo-1)* pageSize;

        UserDemo userDemo = new UserDemo();
        BeanUtils.copyProperties(userDemoDTO, userDemo);

        //查询数据库
        List<UserDemo> userDemoList=demoMapper.queryPageList(userDemo,start,pageSize);

        //查询一共有多少数据
        long total=demoMapper.queryCountByCondition(userDemo);

        //封装到dtoList中
        List<UserDemoDTO> userDemoDTOPageResult=userDemoList.stream().map(userDemo1 -> {
            UserDemoDTO demoDTO = new UserDemoDTO();
            BeanUtils.copyProperties(userDemo1, demoDTO);
            return demoDTO;
        }).collect(Collectors.toList());

        PageResult<UserDemoDTO> pageResult = new PageResult<>();
        pageResult.setRecords(userDemoDTOPageResult);
        pageResult.setPageNo(pageNo);
        pageResult.setPageSize(pageSize);

        return pageResult;
    }


//    /**
//     * mp自动分页的设置   -->需要mp接口继承  extends BaseMapper<UserDemo>
//     * @param userDemoDTO
//     * @param pageNo
//     * @param pageSize
//     * @return
//     */
//    @Override
//    public PageResult<UserDemoDTO> queryPageList(UserDemoDTO userDemoDTO, Integer pageNo, Integer pageSize) {
//
//        UserDemo userDemo = new UserDemo();
//        BeanUtils.copyProperties(userDemoDTO, userDemo);
//
//        // 创建分页对象
//        Page<UserDemo> page = new Page<>(pageNo, pageSize);
//
//        // 执行查询（MyBatis Plus 自动处理分页）
//        IPage<UserDemo> pageResult = demoMapper.queryPageList(page, userDemo);
//
//        // 转换 Entity 到 DTO
//        List<UserDemoDTO> userDemoDTOList = pageResult.getRecords().stream()
//                .map(user -> {
//                    UserDemoDTO demoDTO = new UserDemoDTO();
//                    BeanUtils.copyProperties(user, demoDTO);
//                    return demoDTO;
//                }).collect(Collectors.toList());
//
//        // 封装分页结果
//        PageResult<UserDemoDTO> result = new PageResult<>();
//        result.setRecords(userDemoDTOList);
//        result.setTotal(pageResult.getTotal());      // 自动获取的总数
//        result.setPageNo(pageNo);
//        result.setPageSize(pageSize);
//        result.setPages(pageResult.getPages());      // 总页数
//
//        return result;
//    }


}